use std::num::ParseIntError;

// 将任意进制的数字字符串转换为十进制
fn to_decimal(input: &str, base: u32) -> Result<u32, ParseIntError> {
    u32::from_str_radix(input, base)
}

// 将十进制数字转换为目标进制的字符串
fn from_decimal(decimal: u32, target_base: u32) -> String {
    if decimal == 0 {
        return "0".to_string();
    }

    let mut num = decimal;
    let mut result = String::new();

    // 十六进制可能需要使用 'a' 到 'f' 的字符
    let digits = "0123456789abcdef";

    while num > 0 {
        let remainder = num % target_base;
        result.push(digits.chars().nth(remainder as usize).unwrap());
        num /= target_base;
    }

    result.chars().rev().collect() // 反转结果
}

// 解析格式为 "数字(进制)" 的字符串，并进行进制转换
pub fn convert_base(num_str: &str, target_base: u32) -> String {
    // 使用正则表达式提取数字和进制
    let parts: Vec<&str> = num_str.split('(').collect();
    if parts.len() != 2 {
        return "Invalid input format".to_string();
    }

    let number_str = parts[0]; // 数字部分
    let base_str = parts[1].trim_end_matches(')'); // 进制部分，去掉最后的 ')'

    match base_str.parse::<u32>() {
        Ok(original_base) => {
            // 步骤 1：将数字从原始进制转换为十进制
            match to_decimal(number_str, original_base) {
                Ok(decimal_value) => {
                    // 步骤 2：将十进制数值转换为目标进制
                    from_decimal(decimal_value, target_base)
                }
                Err(_) => "Invalid number in the input".to_string(),
            }
        }
        Err(_) => "Invalid base in the input".to_string(),
    }
}
